package info.skua.zehntausend;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;

/**
 *
 * @author Tobias, Merlin
 */
public class Main {
    public JFrame fenster;
    public Tisch tisch = new Tisch();
    public Becher becher = new Becher();
    private int spieler=1;
    JTextArea textArea;
    private ArrayList<Spieler> spielerListe = new ArrayList<Spieler>();
    
    public static void main(String[] args) {
        Main main = new Main();
    }
    
    public Main(){
        fenster=new JFrame("Zehntausend");
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setVisible(true);
        
        textArea = new JTextArea("", 5, 10);
        textArea.setPreferredSize(new Dimension(100, 100));
        textArea.setLineWrap(true);
        fenster.add(textArea);

        JMenuBar bar = new JMenuBar();
        bar.setBackground(Color.cyan);
        fenster.setJMenuBar(bar);
        JMenu spiel = new JMenu("Spiel");
        JMenu highSC = new JMenu("Highscore");
        bar.add(spiel);
        bar.add(highSC);
        JMenuItem schliessen = new JMenuItem("Schließen");
        JMenuItem player = new JMenuItem("Spieleranzahl");
        JMenuItem neuStarten = new JMenuItem("Neues Spiel");
        JMenuItem pause = new JMenuItem("Pause");
        JMenuItem weiter = new JMenuItem("Weiter");
        JMenuItem bestGesamt = new JMenuItem("Gesamt");
        spiel.add(schliessen);
        spiel.add(neuStarten);
        spiel.add(player);
        spiel.add(pause);
        spiel.add(weiter);
        highSC.add(bestGesamt);

        class exitaction implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent ev) {
                System.exit(0);
            }
        }

        schliessen.addActionListener(new exitaction());
        
        class startAction implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent ev) {
                start();
            }
        }

        neuStarten.addActionListener(new startAction());
        
        class playerAction implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent ev) {
                try{
                    spieler = Integer.parseInt(JOptionPane.showInputDialog("Spieleranzahl"));
                }catch(Exception e){;}
            }
        }

        player.addActionListener(new playerAction());
        
        fenster.pack();
        fenster.setVisible(true);
        fenster.setExtendedState(Frame.MAXIMIZED_BOTH);
    }
    
    public void start(){
        int maxPunkte=0;//Anzahl der Punkte des Spielers mit den meisetn Punkten als Abbruchbedingung
        
        for(int i=0;i<spieler;i++){//Alle Spieler erstellen
            spielerListe.add(new Spieler(JOptionPane.showInputDialog("Bitte Name eingeben Spieler "+(i+1)+":")));
        }
        
        while(maxPunkte<10.000){//Sobald ein Spieler die Zehntausend Punkte erreicht, ist das Spiel vorbei
            for(Spieler s:spielerListe){
                becher.reset();
                tisch.reset();
                
                while(!s.istFertig()){
                    becher.wuerfeln();
                    
                    String out="";
                    for(Wuerfel w:becher.gibWuerfel()){
                        out+=w.gibAugen()+" : ";
                    }
                    textArea.setText(out);
                    ArrayList<Wuerfel> toEdit = new ArrayList<Wuerfel>();
                    for(Wuerfel w:becher.gibWuerfel()){
                        int n = JOptionPane.showConfirmDialog(fenster,"Würfel mit Auge: "+w.gibAugen()+" behalten?","Edit-Mode",JOptionPane.YES_NO_OPTION);
                        if(n==1){
                            tisch.wuerfelHinzufuegen(w);
                            toEdit.add(w);
                        }
                    }

                    for(Wuerfel w:toEdit){
                        becher.wuerfelEntfernen(w);
                    }
                        
                    if(s.aktuellerZug!=3 && !becher.gibWuerfel().isEmpty()){
                        int n = JOptionPane.showConfirmDialog(fenster,"Nochmal würfeln?","Nächster Zug...",JOptionPane.YES_NO_OPTION);
                        if(n==1){
                            s.fertigMitZug=true;
                        }
                    }
                }
                
                s.punkte+=berechnePunkte(tisch.gibWuerfel());
                if(s.punkte>maxPunkte){
                    maxPunkte=s.punkte;
                }
                s.fertigMitZug=false;
            }
        }
    }
    
    public int berechnePunkte(ArrayList<Wuerfel> wList){
        int punkte=0;
        
        int a[] = new int[6];
        for(Wuerfel w:wList){
            a[w.gibAugen()-1]++;
        }
        if(a[0]>=3){punkte+=1000;}else{punkte+=100*a[0];}
        if(a[1]>=3){punkte+=200;}
        if(a[2]>=3){punkte+=300;}
        if(a[3]>=3){punkte+=400;}
        if(a[4]>=3){punkte+=500;}else{punkte+=50*a[4];}
        if(a[5]>=3){punkte+=600;}
            
        
        return punkte;
    }
}
